//-----------------------------------------------------------------------------
// Bend2D - Physics Engine
// Roberto Bender <beto.bender@gmail.com>
// Description: 
// Date: 29/03/2010
//-----------------------------------------------------------------------------
#ifndef COLLIDABLEFORM_H
#define COLLIDABLEFORM_H

#include "point.h"
#include "line.h"
#include "angle.h"

namespace bend2d
{
    class CollidableForm
    {
    public:
        enum eColliableGeometricFormType {eNone, ePoint, eMovingPoint, eLine, eMovingLine, eSquare, eFullSquare, eCircle, eFullCircle};
        
        CollidableForm();
        CollidableForm(eColliableGeometricFormType geometricForm);
        virtual ~CollidableForm() {}

        eColliableGeometricFormType GetGeometricForm() const;
        void SetGeometricForm(eColliableGeometricFormType form);

        void SetError(double error);
        void SetRadius(double radius);
        double GetError() const;
        double GetRadius() const;

        virtual const Line& GetStaticLine() const;
        virtual const Line GetMovingLine() const;
        virtual const Point& GetInitialPosition() const;
        virtual const Point& GetFinishPosition() const;

    private:
        eColliableGeometricFormType m_GeometricForm;
        double m_Error;
        double m_Radius;
        Line  m_FallbackLine;
        Point m_FallbackPoint;
    };
}

#endif
